package com.algorithm;

import java.util.Stack;

/**
 * 两数相加II
 */
public class AddTwoNumbersIi {

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//        Stack<Integer> stack1 = new Stack<>();
//        Stack<Integer> stack2 = new Stack<>();
//        Stack<Integer> stack3 = new Stack<>();
//        while (l1 != null) {
//            stack1.add(l1.val);
//            l1 = l1.next;
//        }
//        while (l2 != null) {
//            stack2.add(l2.val);
//            l2 = l2.next;
//        }
//        int total = 0;
//        while (!stack1.empty() || (!stack2.empty())) {
//            Integer pop1;
//            Integer pop2;
//            if(stack1.empty()){
//                pop1=0;
//            }else {
//                pop1 = stack1.pop();
//            }
//            if (stack2.empty()){
//                pop2=0;
//            }else {
//                pop2=stack2.pop();
//            }
//            int result = pop1 + pop2+total;
//            int pop3 = result % 10;
//            stack3.add(pop3);
//            total =result/10;
//        }
//        if(total>0){
//            stack3.add(total);
//        }
//        ListNode listNode=new ListNode();
//        ListNode head=listNode;
//        while (!stack3.empty()){
//            listNode.next=new ListNode(stack3.pop());
//            listNode=listNode.next;
//        }
//        return head.next;

        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        while (l1 != null) {
            stack1.add(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            stack2.add(l2.val);
            l2 = l2.next;
        }
        int total = 0;
        ListNode curr=null;
        while (!stack1.empty() || (!stack2.empty())) {
            int sum=0;
            if(!stack1.empty()){
                sum+=stack1.pop();
            }
            if (!stack2.empty()){
                sum+=stack2.pop();
            }
            sum+=total;
            int pop3 = sum % 10;
            ListNode listNode=new ListNode(pop3);
            listNode.next=curr;
            curr=listNode;
            total =sum/10;
        }
        if(total>0){
            ListNode listNode=new ListNode(total);
            listNode.next=curr;
            curr=listNode;
        }
        return curr;
    }

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(7, new ListNode(2, new ListNode(4, new ListNode(3))));
        ListNode listNode2 = new ListNode(5, new ListNode(6, new ListNode(4)));
        ListNode listNode = addTwoNumbers(listNode1, listNode2);
        System.out.println(listNode);
    }
}
